package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

/**
 * 信用评估服务接口
 * 
 * @author ruoyi
 * @date 2024-01-26
 */
public interface ICreditEvaluationService 
{
    /**
     * 计算用户信用分
     * 
     * @param userId 用户ID
     * @return 计算后的信用分
     */
    public int calculateCreditScore(Long userId);

    /**
     * 获取信用分维度分析
     * 
     * @param userId 用户ID
     * @return 各维度信用分
     */
    public Map<String, Object> getCreditDimensionAnalysis(Long userId);

    /**
     * 获取信用分历史记录
     * 
     * @param userId 用户ID
     * @return 信用分变化历史
     */
    public List<Map<String, Object>> getCreditScoreHistory(Long userId);

    /**
     * 更新用户信用分
     * 
     * @param userId 用户ID
     * @param scoreChange 分数变化
     * @param reason 变化原因
     * @param actionType 操作类型
     */
    public void updateCreditScore(Long userId, int scoreChange, String reason, String actionType);

    /**
     * 获取用户推荐任务
     * 
     * @param userId 用户ID
     * @return 推荐的提升任务列表
     */
    public List<Map<String, Object>> getRecommendedTasks(Long userId);

    /**
     * 完成提升任务
     * 
     * @param userId 用户ID
     * @param taskId 任务ID
     * @param completionData 完成数据
     */
    public void completeTask(Long userId, Long taskId, Map<String, Object> completionData);

    /**
     * 获取信用等级信息
     * 
     * @param creditScore 信用分
     * @return 信用等级详情
     */
    public Map<String, Object> getCreditLevelInfo(int creditScore);

    /**
     * 检查用户是否有资格使用某项服务
     * 
     * @param userId 用户ID
     * @param serviceType 服务类型
     * @param serviceId 服务ID
     * @return 是否有资格以及相关信息
     */
    public Map<String, Object> checkServiceEligibility(Long userId, String serviceType, Long serviceId);

    /**
     * 获取用户信用报告
     * 
     * @param userId 用户ID
     * @return 详细的信用报告
     */
    public Map<String, Object> getCreditReport(Long userId);

    /**
     * 批量更新用户信用分（定时任务用）
     * 
     * @return 更新结果统计
     */
    public Map<String, Object> batchUpdateCreditScores();

    /**
     * 获取信用分排行榜
     * 
     * @param limit 返回数量限制
     * @return 排行榜数据
     */
    public List<Map<String, Object>> getCreditScoreRanking(int limit);

    /**
     * 预测用户信用分趋势
     * 
     * @param userId 用户ID
     * @param days 预测天数
     * @return 预测数据
     */
    public Map<String, Object> predictCreditTrend(Long userId, int days);
} 